﻿#ifndef USERCART_H
#define USERCART_H

#include "header.h"
#include "database.h"

class UserCart : public QObject
{
    Q_OBJECT

public:
    // 购物车商品项结构
    struct CartItem {
        int productId;
        QString productName;
        double price;
        int quantity;
    };

    UserCart(database &db, QWidget *parent = nullptr);
    ~UserCart();

    // 清空购物车
    void clear();

    // 设置当前商户ID和配送费
    void setBusinessInfo(int businessId, double deliveryFee);

    // 更新购物车中商品数量
    void updateQuantity(int productId, const QString &productName, double price, int delta);

    // 获取购物车中商品数量
    int getQuantity(int productId) const;

    // 获取购物车中商品总数
    int getTotalItems() const;

    // 获取购物车中商品总金额
    double getSubtotal() const;

    // 获取配送费
    double getDeliveryFee() const;

    // 获取总金额（含配送费）
    double getTotalAmount() const;

    // 获取购物车中的所有商品
    QMap<int, CartItem> getItems() const;

    // 购物车是否为空
    bool isEmpty() const;

    // 获取当前商户ID
    int getBusinessId() const { return businessId; }


signals:
    void cartChanged(); // 购物车变化信号

private:
    database &db;
    QMap<int, CartItem> items; // 购物车商品，键为商品ID
    double deliveryFee; // 配送费
    int businessId; // 当前商户ID

};

class CartWidget : public QWidget
{
    Q_OBJECT

public:
    CartWidget(UserCart *cart, QWidget *parent = nullptr);
    ~CartWidget();

    // 更新购物车显示
    void updateDisplay();
    void setPhoneId(int phone_id);

signals:
    // 请求打开个人信息页面的信号
    void openProfilePage();

private:
    UserCart *cart;
    QLabel *totalLabel; // 总金额标签
    QPushButton *checkoutButton; // 确认购买按钮
    int phoneId = -1;
    database db;
    double total;
private slots:
    void onCartChanged();
    void onCheckoutClicked();
};

#endif // USERCART_H
